Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function arrayGetSubset($arr, $start, $end, $step = 1, $by_value = false) {
- /**
- * @arr - массив
- * @start - начало выборки
- * @end - конец выборки
- * @step - инкремент между элементами последовательности. step должен быть положительным числом
- * @by_value - если этот параметр равен true, то выбор подмножества осуществляется не по ключам, а по значениям
- */
- $keys = range($start, $end);
- $res = $by_value ? array_intersect($arr, $keys) : array_intersect_key($arr, array_flip($keys));
- if ($step > 1) {
- $keys_res = $by_value ? $res : array_keys($res);
- $step_keys = range($start, count($keys_res) - 1, $step);
- $steped = array_intersect_key($keys_res, array_flip($step_keys));
- $res = $by_value ? array_intersect($res, $steped) : array_intersect_key($res, array_flip($steped));
- }
- return $res;
- }
- // test
- $arr = [0 => "a", 1 => "b", 4 => "c", 6 => "d", 9 => "e", 13 => "f", 14 => "g", 16 => "h", 17 => "i", 19 => "j", 20 => "k", 21 => "l"];
- print_r(arrayGetSubset($arr, 0, 20));
- print_r(arrayGetSubset($arr, 0, 20, 2));
- print_r(arrayGetSubset($arr, 0, 20, 3));
- //$arr = [0, 1, 3, 5, 7, 9, 10, 11, 12, 14, 15, 18, 20, 21, 22];
- $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22];
- print_r(arrayGetSubset($arr, 1, 20, 1, true));
- print_r(arrayGetSubset($arr, 1, 20, 2, true));
- print_r(arrayGetSubset($arr, 1, 20, 3, true));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement